package com.zhijian.medical.enums.diagnose.report;

import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 食道癌报告枚举
 */
@Slf4j
public class EsophagusEnum {

    /**
     * 术前辅助治疗
     */
    @AllArgsConstructor
    @Getter
    public enum PreoperativeAdjuvantTherapyEnum {

        NO("no", "无"),
        NEW("new", "新辅助治疗"),
        IMMUNOTHERAPY("immunotherapy", "放疗联合免疫治疗"),
        RADIOTHERAPY("radiotherapy", "放疗"),
        OTHER("other", "其他"),
        UNKNOWN("unknown", "未知"),
        UNCERTAIN("uncertain", "不确定");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PreoperativeAdjuvantTherapyEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 标本名称
     */
    @AllArgsConstructor
    @Getter
    public enum SampleNameEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOSIS_NEAR_END("anastomosis_near_end", "吻合口近端"),
        ANASTOMOSIS_REMOTE_END("anastomosis_remote_end", "吻合口远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SampleNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤部位
     */
    @AllArgsConstructor
    @Getter
    public enum TumorLocationEnum {

        NECK_REGION("neck_region", "颈段"),
        CHEST_UPPER("chest_upper", "胸上段"),
        CHEST_MID("chest_mid", "胸中段"),
        CHEST_LOWER("chest_lower", "胸下段"),
        ABDOMINAL("abdominal", "腹段"),
        UNKNOWN("unknown", "未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorLocationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 肿瘤大小
     */
    @AllArgsConstructor
    @Getter
    public enum TumorSizeEnum {

        S3("3.5x2.0", "3.5x2.0"),
        S20("20x16x3", "20x16x3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorSizeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 巨检分型
     */
    @AllArgsConstructor
    @Getter
    public enum MacroscopicClassificationEnum {

        PROGRESS("progress", "进展期食管癌", MacroscopicClassificationProgressEnum.getList()),
        EARLY("early", "早期食管癌", MacroscopicclassificationEarlyEnum.getList());

        private final String key;
        private final String desc;
        private final List<MappingEnum<String, String>> child;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MacroscopicClassificationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), e.getChild()))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 巨检分型-进展期食管癌
     */
    @AllArgsConstructor
    @Getter
    public enum MacroscopicClassificationProgressEnum {

        MEDULLARY_TYPE("medullary_type", "髓质型"),
        MUSHROOM_UMBRELLA_TYPE("mushroom_umbrella_type", "蕈伞型"),
        ULCERATIVE_TYPE("ulcerative_type", "溃疡型"),
        NARROWING_TYPE("narrowing_type", "缩窄型"),
        NO_TYPE("no_type", "不能分类型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MacroscopicClassificationProgressEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 巨检分型-早期食管癌
     */
    @AllArgsConstructor
    @Getter
    public enum MacroscopicclassificationEarlyEnum {

        TITIAN_UPLIFT_TYPE("titian_uplift_type", "有蒂隆起型（0-Ip）"),
        UNTAMED_RAISED_TYPE("untamed_raised_type", "无蒂隆起型（0-Is）"),
        SHALLOW_UPLIFT_TYPE("shallow_uplift_type", "表浅隆起型（0-IIa）"),
        SHALLOW_FLAT_TYPE("shallow_flat_type", "表浅平坦型（0-IIb）"),
        SHALLOW_CONCAVE_TYPE("shallow_concave_type", "表浅凹陷型（0-IIc）"),
        UPLIFT_CONCAVE_TYPE("uplift_concave_type", "表浅隆起型+表浅凹陷型（0-IIa+IIc型）"),
        CONCAVE_TYPE("concave_type", "凹陷型（0-III）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MacroscopicclassificationEarlyEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 组织学分型
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalTypeEnum {

        MALIGNANT_EPITHELIAL_TUMOR("malignant_epithelial_tumor", "恶性上皮性肿瘤", MalignantEpithelialTumorEnum.getList()),
        UNDIFFERENTIATED("undifferentiated", "未分化癌", UndifferentiatedEnum.getList()),
        NEUROENDOCRINE("neuroendocrine", "神经内分泌癌", NeuroendocrineEnum.getList()),
        NEUROENDOCRINE_TUMORS("neuroendocrine_tumors", "神经内分泌肿瘤", NeuroendocrineTumorsEnum.getList()),
        MIXED_NEUROENDOCRINE("mixed_neuroendocrine", "混合性神经内分泌-非神经内分泌肿瘤", MixedNeuroendocrineEnum.getList());

        private final String key;
        private final String desc;
        private final List<MappingEnum<String, String>> child;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), e.getChild()))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分型-恶性上皮性肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum MalignantEpithelialTumorEnum {

        SQUAMOUS_CELLS("squamous_cells", "鳞状细胞癌"),
        VERRUCAS_SQUAMOUS_CELLS("verrucas_squamous_cells", "疣状鳞状细胞癌"),
        SPINDLE_SHAPED_SQUAMOUS_CELL("spindle_shaped_squamous_cell", "梭形细胞鳞状细胞癌"),
        BASAL_LIKE_SQUAMOUS_CELLS("basal_like_squamous_cells", "基底样鳞状细胞癌"),
        GLANDULAR_SCALES("glandular_scales", "腺鳞癌"),
        ADENOCARCINOMA("adenocarcinoma", "腺癌"),
        ADENOID_CYSTIC("adenoid_cystic", "腺样囊性癌"),
        MUCOUS_EPIDERMAL_LIKE("mucous_epidermal_like", "黏液表皮样癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MalignantEpithelialTumorEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分型-未分化癌
     */
    @AllArgsConstructor
    @Getter
    public enum UndifferentiatedEnum {

        NOS("nos", "末分化癌，NOS"),
        LYMPHOID_EPITHELIAL_TUMOR_LIKE("lymphoid_epithelial_tumor_like", "淋巴上皮瘤样癌"),
        BASAL_LIKE_SQUAMOUS_CELLS("basal_like_squamous_cells", "基底样鳞状细胞癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(UndifferentiatedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分型-神经内分泌癌
     */
    @AllArgsConstructor
    @Getter
    public enum NeuroendocrineEnum {

        NOS("nos", "神经内分泌癌，NOS"),
        LARGE_CELL_NEUROENDOCRINE("large_cell_neuroendocrine", "大细胞神经内分泌癌"),
        SMALL_CELL_NEUROENDOCRINE("small_cell_neuroendocrine", "小细胞神经内分泌癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NeuroendocrineEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分型-神经内分泌肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum NeuroendocrineTumorsEnum {

        NOS("nos", "神经内分泌肿瘤，NOS"),
        LEVEL_1("level_1", "神经内分泌肿瘤，1级（G1）"),
        LEVEL_2("level_2", "神经内分泌肿瘤，2级（G2）"),
        LEVEL_3("level_3", "神经内分泌肿瘤，3级（G3）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NeuroendocrineTumorsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学分型-混合性神经内分泌一非神经内分泌肿
     */
    @AllArgsConstructor
    @Getter
    public enum MixedNeuroendocrineEnum {

        LEVEL_1("level_1", "混合性神经内分泌-非神经内分泌肿瘤（MiNEN）"),
        LEVEL_2("level_2", "复合性小细胞癌-腺癌"),
        LEVEL_3("level_3", "复合性小细胞癌-鳞状细胞癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MixedNeuroendocrineEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 百分比
     */
    @AllArgsConstructor
    @Getter
    public enum PercentageEnum {

        P0(0, "0"),
        P10(10, "10"),
        P20(20, "20"),
        P30(30, "30"),
        P40(40, "40"),
        P50(50, "50"),
        P60(60, "60"),
        P70(70, "70"),
        P80(80, "80"),
        P90(90, "90"),
        P100(100, "100");

        private final Integer key;
        private final String desc;

        private static final List<MappingEnum<Integer, String>> TEMP_MAPPING = Arrays.stream(PercentageEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<Integer, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 组织学分级
     */
    @AllArgsConstructor
    @Getter
    public enum OrganizationalGradingEnum {

        LEVEL_1("level_1", "1级（高分化）"),
        LEVEL_2("level_2", "2级（中分化）"),
        LEVEL_3("level_3", "3级（低分化）"),
        LEVEL_4("level_4", "4级（未分化）"),
        NOT_APPLICABLE("not_applicable", "不适用"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评佶");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OrganizationalGradingEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤浸润程度
     */
    @AllArgsConstructor
    @Getter
    public enum DepthOfTumorInfiltrationEnum {

        NO_EVALUATED("no_evaluated", "原发肿瘤不能评价"),
        NO_EVIDENCE("no_evidence", "没有原发肿瘤的证据（TO）"),
        HIGH_LEVEL_EPITHELIAL_NEOPLASM("high_level_epithelial_neoplasm", "高级别上皮内瘤变（Tis）"),
        HIGH_GRADE_DYSPLASIA("high_grade_dysplasia", "高级別异型增生（Tis）"),
        TUMOR_INVADES_THE_SUBMUCOSAL_LAMINA_PROPRIA("tumor_invades_the_submucosal_lamina_propria", "肿瘤侵及黏膜固有层（T1a）"),
        TUMOR_INVADES_THE_MUCOSAL_MUSCLE_LAYER("tumor_invades_the_mucosal_muscle_layer", "肿瘤侵及黏膜肌层（T1a）"),
        TUMOR_INVADES_THE_SUBMUCOSAL_LAYER("tumor_invades_the_submucosal_layer", "肿瘤侵及黏膜下层（T1b）"),
        TUMOR_INVADES_THE_INTRINSIC_MUSCLE_LAYER("tumor_invades_the_intrinsic_muscle_layer", "肿块侵及固有肌层（T2）"),
        TUMOR_INVADES_THE_ESOPHAGEAL_FIBROUS_MEMBRANE("tumor_invades_the_esophageal_fibrous_membrane", "肿瘤侵及食管纤維膜（T3）"),
        INVASION_OF_PLEURA("invasion_of_pleura", "侵及胸膜（T4a）"),
        NOT_APPLICABLE("not_applicable", "侵及心包（T4a）"),
        INVASION_OF_PERICARDIUM("invasion_of_pericardium", "侵及奇静脉（T4a）"),
        INVASION_OF_ADJACENT_STRUCTURES("invasion_of_adjacent_structures", "侵及邻近结构（T4b）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DepthOfTumorInfiltrationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 累及胃食管交界
     */
    @AllArgsConstructor
    @Getter
    public enum InvolvingTheGastroesophagealJunctionEnum {

        NOT_YET_SEEN("not_yet_seen", "未见"),
        VISIBLE("visible", "可见"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InvolvingTheGastroesophagealJunctionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 脉管癌栓
     */
    @AllArgsConstructor
    @Getter
    public enum VascularCancerThrombusEnum {

        NOT_YET_SEEN("not_yet_seen", "末见癌栓"),
        VISIBLE("visible", "见癌栓"),
        SUSPICIOUS("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(VascularCancerThrombusEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 神经侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum NeurologicalInvasionEnum {

        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        VISIBLE("visible", "见侵犯"),
        SUSPICIOUS("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NeurologicalInvasionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 是否侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum ViolationEnum {

        NOT_YET_SEEN("yes", "是"),
        VISIBLE("no", "否"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ViolationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 两端切缘
     */
    @AllArgsConstructor
    @Getter
    public enum CutEdgesAtBothEndsEnum {

        NO_FOUND("no_found", "未见癌残留"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘"),
        CANCER_INVOLVEMENT("cancer_involvement", "见癌累及"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CutEdgesAtBothEndsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 上切缘
     */
    @AllArgsConstructor
    @Getter
    public enum UpperCuttingEdgeEnum {

        NO_FOUND("no_found", "未见癌残留"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘"),
        CANCER_INVOLVEMENT("cancer_involvement", "见癌累及"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(UpperCuttingEdgeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 下切缘
     */
    @AllArgsConstructor
    @Getter
    public enum LowerCuttingEdgeEnum {

        NO_FOUND("no_found", "未见癌残留"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘"),
        CANCER_INVOLVEMENT("cancer_involvement", "见癌累及"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LowerCuttingEdgeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 环周切缘
     */
    @AllArgsConstructor
    @Getter
    public enum CircumferentialCuttingEdgeEnum {

        NO_FOUND("no_found", "未见癌残留"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘"),
        CANCER_INVOLVEMENT("cancer_involvement", "见癌累及"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CircumferentialCuttingEdgeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 吻合圈
     */
    @AllArgsConstructor
    @Getter
    public enum MatchingCircleEnum {

        NO_FOUND("no_found", "未见癌残留"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘"),
        CANCER_INVOLVEMENT("cancer_involvement", "见癌累及"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MatchingCircleEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 周围食管黏膜
     */
    @AllArgsConstructor
    @Getter
    public enum SurroundingEsophagealMucosaEnum {

        CHRONIC_ESOPHAGITIS("chronic_esophagitis", "慢性食管炎"),
        CHRONIC_ESOPHAGI_WITH_SQUAMOUS_EPITHELIAL_HYPERPLANE("chronic_esophagi_with_squamous_epithelial_hyperplane", "慢性食管炎伴鱗状上皮增生"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SurroundingEsophagealMucosaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 周围胃黏膜
     */
    @AllArgsConstructor
    @Getter
    public enum SurroundingGastricMucosaEnum {

        CHRONIC_ESOPHAGITIS("chronic_esophagitis", "轻度慢性非菱缩性胃炎"),
        ACUTE_ACTIVITY("acute_activity", "中度慢性非菱缩性胃炎伴急性活动"),
        EPITHELIAL_METAPLASIA("epithelial_metaplasia", "轻度慢性非菱缩性胃炎伴肠上皮化生"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SurroundingGastricMucosaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 淋巴结
     */
    @AllArgsConstructor
    @Getter
    public enum LymphGlandEnum {

        NOT_TRANSFERRED("not_transferred", "未见转移"),
        SEE_TRANSFER("see_transfer", "见转移"),
        ADIPOSE_TISSUE("adipose_tissue", "脂肪组织"),
        GRANULOMATOUS_INFLAMMATION("granulomatous_inflammation", "肉芽肿性炎"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LymphGlandEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 远处转移
     */
    @AllArgsConstructor
    @Getter
    public enum DistantTransferEnum {

        CLINICAL_NO_TRANSFER("clinical_no_transfer", "临床无远处转移（cM0）"),
        no_distant_metastasis("no_distant_metastasis", "无远处转移（M0）"),
        DISTANT_METASTASIS("distant_metastasis", "有远处转移（M1）"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估（Mx）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DistantTransferEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-表达式
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        PLUS2("++", "++"),
        PLUS3("+++", "+++"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-其他表达
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryOtherExpressionEnum {

        LYMPHOCYTE_EXPRESSION("lymphocyte_expression", "淋巴细胞表达"),
        VASCULAR_EXPRESSION("vascular_expression", "脉管表达"),
        IMMUNE_CELL_EXPRESSION("immune_cell_expression", "间质免疫细胞表达");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryOtherExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 原位杂交/特殊染色-分析结果
     */
    @AllArgsConstructor
    @Getter
    public enum InSituHybridizationExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        ZERO("0", "0"),
        PLUS1("1+", "1+"),
        PLUS2("2+", "2+"),
        PLUS3("3+", "3+"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InSituHybridizationExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 其他送检组织
     */
    @AllArgsConstructor
    @Getter
    public enum OtherInspectionOrganizationsEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOTIC_SITE_NEAR_END("anastomotic_site_near_end", "吻合口近端"),
        ANASTOMOTIC_SITE_REMOTE_END("anastomotic_site_remote_end", "吻合口远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OtherInspectionOrganizationsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }
}
